<header>
<h1>典籍檢索</h1>
</header>

<p>右上方工具欄的「搜尋」頁籤有站內搜尋功能，此功能是調用Google搜尋引擎，可快速找到最相關的頁面，但無法指定精細的檢索條件，較次要的資訊也可能找不到。</p>

<p>若要更精細的檢索，可從典籍列表進入<a href="../book/search.html">典籍檢索器</a>。操作方式如下：</p>

<ol>
<li>在「檢索範圍」的典籍列表中<strong>選擇想搜尋的典籍</strong>
  <ul>
  <li>可按住滑鼠框選，或按住Shift或Ctrl鍵點擊複選。</li>
  <li>在「檢索範圍」的「關鍵詞」輸入關鍵詞並點擊「篩選」，即可篩選及列出相關的典籍。</li>
  <li>篩選後可點擊「全選」或「全不選」將列出的典籍加入或取消選取，或按住Ctrl框選將典籍加入選取。（不符合關鍵詞而隱藏的典籍會維持原先的選取狀態，若不按住Ctrl則會在選取新典籍時把原來選取的典籍取消選取）</li>
  <li>可重覆上述步驟，改變關鍵詞，篩選列出不同典籍，再用「全選」、「全不選」或Ctrl點擊的方式加入或取消選取典籍。</li>
  <li>清空關鍵詞再按「篩選」，可重新列出所有典籍。</li>
  </ul>
</li>
<li>在「檢索內容」的欄位<strong>輸入檢索條件</strong>，並<strong>設定適當的檢索單位</strong>
  <ul>
  <li>「關鍵詞」用於指定要在各典籍文本中查詢的文字。</li>
  <li>「檢索單位」決定檢索的粒度。例如指定的關鍵詞是「含有『桂枝』及『麻黃』」，當檢索單位為「全書」時，程式會把含有「桂枝」及「麻黃」的每本書列出；若檢索單位為「章節」，程式會把每本書於章節標題處分割，並且把含有「桂枝」及「麻黃」的每個章節列出；若檢索單位為「段落」，程式會把每本書於章節標題及各段落處分割，並且把含有「桂枝」及「麻黃」的每個段落列出。若某書第一章有「桂枝」，最後一章有「麻黃」，他處皆無，檢索單位為「全書」時會在此書找到一筆結果，檢索單位為「章節」時則無結果。</li>
  <li>「比對異體字」勾選時，程式會在搜尋關鍵詞時一併考慮異體字，例如搜尋「脅下」可以找到「脇下」，反之則否。笈成的異體字一般定義為意義可相通的字，以及簡化字及其對應原字，例如檢索「髮」會考慮意義相通的異體字「髪」和簡化字「发」，但不會考慮「發」、「発」等；檢索「发」會考慮「髮」、「髪」、「發」、「発」等。如有特殊需求，可點擊旁邊的選項按鈕更改異體字表。</li>
  <li>「 略過標點」勾選時，程式會在搜尋關鍵詞時略過標點符號。例如搜尋「發熱、汗出、惡風、脈緩者」可以找到「發熱汗出惡風脈緩者」、「發熱汗出。惡風脈緩者」、「發熱，汗出，惡風，脈緩者」、……等等。預設會略過所有非文字、數字的Unicode字元（有些舊瀏覽器不支援讀取Unicode定義表，此時會採用後備的符號表略過一些常見符號），如有特殊需求，可點擊旁邊的選項按鈕更改標點符號字元的定義。</li>
  <li>「章節」用於限定章節，例如查詢傷寒論時，將檢索單位設為「段落」，章節設為「太陽病」，則檢索結果只會列出「太陽病」章節以下的段落。此項在檢索單位設為「全書」時沒有作用。</li>
  <li>「作者」用於限定典籍的作者。典籍可能記錄多名作者、譯者、校者，其中一個符合即視為符合。例如某書的作者記錄為「『佚名』，唐·『王冰』編注，宋·『林億』校正」，則此欄填入「佚名」、「王冰」、或「林億」皆可找到此書。注意：本站典籍的作者資訊以記載姓名為主，用字、號檢索可能會找不到資料，例如取「張機」、「葉桂」而不取「張仲景」、「葉天士」。</li>
  <li>「年份」用於限定典籍的年代。例如「200/1000」表示公元200年至1000年，「1600/」表示公元1600年以後，「/800」表示公元800年以前。限於考據能力，典籍的年份記錄可能為多個點或區間，只要與其中一個有交集即視為符合。例如某書的年代記錄為「公元1000年至1200年」，則此欄填入「1100」、「900/1100」、「1100/1300」皆可找到此書。對於公元前的年代，「0」表示公元前1年，「-1」表示公元前2年，依此類推。</li>
  <li>「品質」用於限定典籍的品質，格式是去除「%」的數字或區間。例如「75」表示品質=75%，「50/」表示品質≥50%，「0/80」表示0%≤品質≤80%。品質是本站對典籍電子文本完善程度的大略評價，細節可參見<a href="quality.html">品質標示</a>。</li>
  </ul>
</li>
<li>按下「<strong>開始檢索</strong>」，然後靜候程式列出找到的結果
  <ul>
  <li>每筆檢索結果皆會列出位置及內容摘要，位置包含書名、章節、段落等部分，每部分皆附有連結，點擊即可連入原始頁面，並自動捲動到相應章節或段落開始的位置。</li>
  <li>此外，從檢索結果連入原始頁面時，會自動為關鍵詞上色，可按Tab鍵向後跳轉或按Shift+Tab向前跳轉。（預設跳轉點會以頁面開頭為計算基準，可先在頁面任一位置點一下以便將該處設為計算基準）</li>
  </ul>
</li>
</ol>

<h2>關鍵詞語法說明</h2>
<p>檢索內容的「關鍵詞」、「章節」及檢索範圍的關鍵詞，皆可使用以下語法指定較複雜的檢索條件。</p>
<ul>
<li><strong>半形空格</strong>或「<code><strong>AND</strong></code>」（前後須空白，大小寫不拘）表示「且」。例如「<code>桂枝 麻黃</code>」、「<code>桂枝 AND 麻黃</code>」、「<code>桂枝 and 麻黃</code>」表示含有「桂枝」也含有「麻黃」的檢索單位。</li>
<li>「<code><strong>OR</strong></code>」（前後須空白，大小寫不拘）表示「或」。例如「<code>桂枝 OR 麻黃</code>」、「<code>桂枝 or 麻黃</code>」表示含有「桂枝」或含有「麻黃」的檢索單位。</li>
<li>「<code><strong>-</strong></code>」（後面不可空白）表示「非」。例如「<code>桂枝 -麻黃</code>」表示含有「桂枝」且不含「麻黃」的檢索單位。</li>
<li><strong>半形括號</strong>包住的部分視為群組優先運算。例如「<code>(桂枝 OR 肉桂) AND (乾薑 OR 生薑)</code>」表示「含有『桂枝』或『肉桂』，且含有『乾薑』或『生薑』」。</li>
<li><strong>半形雙引號</strong>包住的文字會脫除特殊意義，引號裡可用連續兩個半形雙引號表示一個雙引號。例如可用「<code>"Mary and I ""love"" you"</code>」比對「Mary and I "love" you」（若直接搜尋「<code>Mary and I "love" you</code>」則會被解讀為「含有『Mary』且含有『I』且含有『love』且含有『you』」）。</li>
<li>可用「<code><strong>&lt;指令&gt;:<strong></code>」或「<code><strong>-&lt;指令&gt;:<strong></code>」設定進階的檢索條件。目前支援的指令如下：
  <ul>
  <li>「<code>syn:</code>」：本指令後面出現的關鍵詞皆比對異體字；加負號則反之。</li>
  <li>「<code>np:</code>」：本指令後面出現的關鍵詞皆忽略標點符號及空白；加負號則反之。</li>
  <li>「<code>re:</code>」：本指令後面出現的關鍵詞視為<a href="regex.html">正規表示式</a>；加負號則反之。例如「<code>re:"桂枝.{0,20}麻黃|麻黃.{0,20}桂枝"</code>」表示「桂枝」與「麻黃」相隔20字以內。</li>
  <li>上述指令的解析只考慮位置，與括號等要素無關。例如「<code>(syn: 參 OR 耆) 薑 -syn: 朮</code>」或「<code>syn: (參 OR 耆) 薑 -syn: 朮</code>」都表示「參」、「耆」、「薑」比對異體字而「朮」不比對異體字。</li>
  <li>指令後亦可接關鍵詞。注意若帶負號的指令直接接著關鍵詞（未用空白分隔），則只有指令轉為負向，關鍵詞仍為正向，例如「<code>-syn:干</code>」表示檢索含有「干」的檢索單位，不比對「干」的異體字。</li>
  </ul>
</li>
</ul>

<h2>補充說明</h2>
<ul>
<li>和工具欄一樣，將滑鼠停留在典籍檢索器的各選項上，會顯示提示文字（觸控設備可長按顯示），可善加利用。</li>
<li>檢索選項會在每次檢索時記錄在網址參數，可透過瀏覽器歷史快速調出之前做過的檢索。用「⚙️」設定的進階選項值會綁定於目前分頁，開新分頁即會清除，有些瀏覽器可用「複製分頁」功能複製設定值至新開分頁。</li>
<li>「進階檢索」的選項可進一步決定檢索時比對的內容，例如勾選「古版」則比對古版文本，不勾選「校」則檢索時會略過校文。尚可用「排除元素」在檢索時去除其他不必要的內容。</li>
<li>典籍檢索器的運作方式是將選取的典籍的全文即時下載至瀏覽器，再由瀏覽器逐一分析內容、判斷條件而後輸出，因此檢索效率主要取決於網路速度及瀏覽器和機器的性能，檢索量大時可能佔用大量網路流量及本機資源。可擅用以下技巧提高檢索效率及減少延遲：
  <ul>
  <li><strong>減少檢索的典籍數量</strong>：盡可能用書名篩選縮小要檢索的典籍範圍，減少勾選的數目。</li>
  <li><strong>檢索全書再「縮小檢索範圍」</strong>：若要一次從較多典籍中檢索相關段落，可先把「檢索單位」設為「全書」，列出相關典籍後，點擊「縮小檢索範圍」將檢索範圍限縮至找到的典籍，再把「檢索單位」改為「段落」重新檢索。這是因為檢索單位為「章節」或「段落」時，程式須對所有勾選的典籍做分章、分段，會大幅降低檢索速度（實測約差40倍）。</li>
  <li><strong>減少結果筆數</strong>：指定較詳細的關鍵詞，減少符合的檢索結果。</li>
  <li><strong>減少顯示的內容</strong>：若預期檢索結果筆數極多，可考慮取消勾選「結果呈現」的「展開內容」，如此一來每筆檢索結果在使用者點擊前不會顯示摘要。由於瀏覽器排版渲染內容也會消耗運算資源，這樣做可減少瀏覽器延遲及提高檢索速度。</li>
  <li>使用運算功能較強的機器（桌機或筆電一般較平板電腦或手機快）及瀏覽器（如Chromium系瀏覽器執行腳本的速度通常較其他瀏覽器快），在速度快的網路環境下使用，使用前關閉其他應用程式並停止大流量的網路傳輸活動。</li>
  <li><strong>使用正規表示式</strong>：有技巧地利用正規表示式，有時可減少不必要的運算，提高效率。例如若要檢索甲或乙，使用正規表示式的「<code>re:"甲|乙"</code>」通常會比「<code>甲 OR 乙</code>」更快，因前者只須掃描整個檢索單位一次，後者可能需要掃描多次。</li>
  </ul>
</li>
<li>典籍檢索器可透過URL參數進一步客製化。URL參數格式為<code>#?鍵1=值1&鍵2=值2&...</code>。可用參數如下：
  <ul>
  <li>「<code>autorun</code>」：設定為真值（如<code>1</code>）時會在載入後自動啟動檢索。</li>
  <li>「<code>index</code>」：設定典籍列表網址。典籍列表為UTF-8編碼的HTML網頁檔（由於瀏覽器安全性限制，須支援CORS才能正常載入），程式會自動擷取「<code>[data-type="booklist"]</code>」元素下的內容作為典籍列表，格式可參照<a href="../book/index.html">典籍列表</a>原始碼。本參數可指定多次，可用空值表示預設列表，例如「<code>#?index=&index=https://example.com/mybooklist&index=https://example.com/mybooklist2</code>」表示依序載入預設列表、https://example.com/mybooklist、https://example.com/mybooklist2。網址可使用data URL，例如「<code>#?index=data:,&lt;title&gt;自訂列表&lt;/title&gt;&lt;div data-type=&quot;booklist&quot;&gt;&lt;a href=&quot;https://example.com/book1.html&quot;&gt;book1&lt;/a&gt;&lt;/div&gt;</code>」。</li>
  <li>「<code>synonym</code>」：設定異體字列表網址。異體字列表為UTF-8編碼的JSON檔案（由於瀏覽器安全性限制，須支援CORS才能正常載入）。本參數可指定多次，可用空值表示預設列表，例如「<code>#?synonym=https://example.com/synynomlist&synonym=https://example.com/synynomlist2&synonym=</code>」表示依序載入https://example.com/synynomlist、https://example.com/synynomlist2、預設列表。網址可使用data URL，例如「<code>#?synonym=data:,{"幹":["干"]}</code>」。</li>
  <li>「<code>bsep</code>」：設定典籍列表的分隔字元。</li>
  <li>「<code>sep</code>」：設定檢索結果的分隔字元。</li>
  <li>「<code>thres</code>」：設定提醒檢索書籍數目過多的臨界值。</li>
  <li>「<code>othres</code>」：設定提醒檢視書籍數目過多的臨界值。</li>
  <li>「<code>nopunc</code>」：設定略過標點字元的正規表示式值。</li>
  </ul>
</li>
</ul>
